package zuo.from0516.other.day02;

/**
 * Q2:两数相加（中等）：给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，
 * 并且每个节点只能存储 一位 数字。
 * 请你将两个数相加，并以相同形式返回一个表示和的链表。
 * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 */
public class Code06_AddTwoNumbers {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int len1 = getListLength(l1);
        int len2 = getListLength(l2);
        ListNode l = len1 > len2 ? l1 : l2;
        ListNode s = l  == l1  ? l2 :  l1;
        ListNode curL = l;
        ListNode curS = s;
        ListNode last = curL;
        int carry = 0;
        int sum = 0;
        while (curS != null){
            sum = curL.val + curS.val + carry;
            curL.val = sum % 10;
            carry = sum/10;
            last =  curL;
            curL = curL.next;
            curS = curS.next;
        }
        while(curL != null){
            sum = curL.val + carry;
            curL.val =  sum % 10;
            carry = sum/10;
            last = curL;
            curL = curL.next;
        }
        while(carry != 0){
            last.next = new ListNode(carry, null);
        }
        return l;
    }

    public int getListLength(ListNode head){
        int len = 0;
        while(head != null){
            len ++;
            head = head.next;
        }
        return len;
    }

    public static void main(String[] args) {
        
    }
}
